package org.langqiao.algorithm;
/*
 * 三角螺旋矩阵
 * 方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是：使用1，2，3….的自然数列，从左上角开始，按照顺时针方向螺旋填充。
例如：当n=3时，输出：
1 2 3
6 4
5
当n=4时，输出：
1  2 3 4
9 10 5
8  6
7
当n=5时，输出：
  1  2  3  4  5
 12 13 14  6 
 11 15  7
 10  8
  9
程序运行时，要求用户输入整数n（3~20）
程序输出：方阵的上三角部分。
要求格式：每个数据宽度为4，右对齐。
要求考生把所有类写在一个文件中。调试好后，存入与考生文件夹下对应题号文件夹中的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。
另外，源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

 */
public class SanJiaoLuoXuanJuZhen {
	  public static void main(String[] args) {  
	         triangleMatrix(5);  
	     }  
	     private static void triangleMatrix(int num) {  
	         int matrix[][] = new int[num][num];  //初始化一个矩阵
	         int row = 0,col = 0;//行和列
	         int direction = 0; 
	// 方向，取值范围：0，1，2  
	         int digit = 1;  
	         for(int i = num;i>=1;i--){  
	             for(int j = i;j>=1;j--){  
	                 if(j==1){ 
	// 到达某个方向的终点，改变方向  
	                     direction = (direction+1)%3;  
	                 }  
	                 switch(direction){  
	                 case 0: 
	// 向下  
	                     matrix[row++][col] = digit++;  
	                     break;  
	                 case 1: 
	// 向右  
	                     matrix[row][col++]=digit++;  
	                     break;  
	                 case 2: 
	// 斜向上  
	                     matrix[row--][col--] = digit++;  
	                     break;  
	                 }  
	             }  
	         }  
	         //遍历矩阵，打印结果
	         for(int i = 0;i<num;i++){  
	             for(int j = 0;j<=i;j++){  
	                 System.out.print(matrix[i][j]+"\t");  
	             }  
	             System.out.println();  
	        }  
     }  
}
